home *** CD-ROM | disk | FTP | other *** search
/ Aminet 19 / Aminet 19 (1997)(GTI - Schatztruhe)[!][Jun 1997].iso / Aminet / text / tex / rtf2latex.lha / rtf2LaTeX / macintosh.c < prev    next >
C/C++ Source or Header  |  1997-02-28  |  2KB  |  89 lines

  1. /* macintosh.c  4.5.1993
  2.  *
  3.  * Functions calling Macintosh file system and user interface
  4.  * routines for use by rtf2LaTeX by Erwin Wechtl.
  5.  *
  6.  * Written and copyright (c) 1993 by Alex Viskovatoff
  7.  * (visko@harvard.edu). Permission is granted to
  8.  * distribute and modify this file.
  9.  */
  10.  
  11. #include <MacHeaders>
  12. #include "macintosh.h"
  13.  
  14. static char home_pathname_buf[PATHNAME_LENGTH];
  15.  
  16. static char *make_pathname(char *q,long dir_id, int vol_num)
  17. {
  18.     CInfoPBRec    directory;
  19.     Str31        dir_name;
  20.     int            n;
  21.     directory.dirInfo.ioDrDirID = dir_id;
  22.     directory.dirInfo.ioVRefNum = vol_num;
  23.     directory.dirInfo.ioFDirIndex = -1;
  24.     directory.dirInfo.ioNamePtr = dir_name;
  25.     for (;;directory.dirInfo.ioDrDirID = directory.dirInfo.ioDrParID) {
  26.         *q-- = ':';
  27.         PBGetCatInfoSync(&directory);
  28.         for (n=*dir_name; n; n--) *q-- = (char) dir_name[n];
  29.         if (directory.dirInfo.ioDrDirID == 2) break;
  30.     }
  31.     return q+1;
  32. }    
  33.  
  34. char *get_home_dir()
  35. {
  36.     FCBPBRec    home_dir;
  37.     Str31        dir_name;
  38.     Str31        apName;
  39.     int            pathRefNum;
  40.     Handle        apParam;
  41.     char        *p = home_pathname_buf+PATHNAME_LENGTH-1;
  42.     GetAppParms(&apName,&pathRefNum,&apParam);
  43.     home_dir.ioRefNum = pathRefNum;
  44.     home_dir.ioFCBIndx = 0;
  45.     home_dir.ioNamePtr = dir_name;
  46.     PBGetFCBInfoSync(&home_dir);
  47.     *p-- = 0;
  48.     return make_pathname(p,home_dir.ioFCBParID,home_dir.ioFCBVRefNum);
  49. }
  50.  
  51. static pascal Boolean not_rtf_file_p(ioParam *parms)
  52. {
  53.     StringPtr name = parms->ioNamePtr;
  54.     char *p, *q;
  55.     static char extension[] = ".rtf";
  56.     int i;
  57.     if (name[0] < 5) return TRUE;
  58.     for (i=4, p = (char*) name + name[0] - 3, q=extension; i; i--)
  59.         if (*p++ != *q++) return TRUE;
  60.     return FALSE;
  61. }
  62.  
  63. char *get_file_from_dialog()
  64. {
  65.     static char    buf[PATHNAME_LENGTH];
  66.     SFReply        reply;
  67.     Point        dialog_loc = {100,100};
  68.     long        text_file_type = 'TEXT';
  69.     SFGetFile(dialog_loc,"\p0",¬_rtf_file_p,1,&text_file_type,NULL,&reply);
  70.     if (reply.good) {
  71.         WDPBRec        working_dir;
  72.         CInfoPBRec    directory;
  73.         Str31        ioName;
  74.         int n;
  75.         unsigned char *p;
  76.         char *pname_start;
  77.         char *q = buf+PATHNAME_LENGTH-1;
  78.         unsigned char *filename = reply.fName;
  79.         *q-- = 0;
  80.         for (n=*filename; n; n--) *q-- = filename[n];
  81.         working_dir.ioVRefNum = reply.vRefNum;
  82.         working_dir.ioNamePtr = filename;
  83.         working_dir.ioWDIndex = 0;
  84.         PBGetWDInfoSync(&working_dir);
  85.         return make_pathname(q,working_dir.ioWDDirID,working_dir.ioWDVRefNum);
  86.     }
  87.     else return NULL;
  88. }
  89.